﻿#include "顺序表.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

顺序表_结构* 构造_顺序表()
{
    顺序表_结构 *表 = malloc(sizeof(顺序表_结构));
    表->表长 = 0;
    return 表;
}

void 销毁_顺序表(顺序表_结构* 表)
{
    free(表);
}

void 添加顺序表数据(顺序表_结构* 表, const int 数据)
{
    表->数据[表->表长] = 数据;
    表->表长++;
}

void 删除顺序表数据(顺序表_结构* 表, const int 索引)
{
    if(顺序表空了(表))
    {
        perror("别删了，表是空的！");
        return;
    }
    if(表->表长 <= 索引)
    {
        perror("索引越界了！");
        return;
    }
    for (int i = 索引;i < 表->表长 - 1;i++)
    {
        表->数据[i] = 表->数据[i+1];
    }
    表->表长--;
}

void 清空顺序表(顺序表_结构* 表)
{
    表->表长 = 0;
}

void 更新顺序表数据(顺序表_结构* 表, const int 索引, const int 数据)
{
    if(表->表长 <= 索引)
    {
        perror("索引越界了！");
        return;
    }
    表->数据[索引] = 数据;
}

int 查询顺序表数据(const 顺序表_结构* 表, const int 索引)
{
    if(表->表长 <= 索引)
    {
        perror("索引越界了！");
        return INT_MIN;
    }
    return 表->数据[索引];
}

顺序表_结构* 合并两个升序顺序表(const 顺序表_结构* 表1, const 顺序表_结构* 表2)
{
    顺序表_结构 *结果 = 构造_顺序表();
    int 比1 = 0,比2 = 0;
    while (比1 < 表1->表长 || 比2 < 表2->表长)
    {
        int 值1,值2;
        if(比1 >= 表1->表长)
        {
            值2 = 查询顺序表数据(表2,比2);
            goto 添2;
        }
        if(比2 >= 表2->表长)
        {
            值1 = 查询顺序表数据(表1,比1);
            goto 添1;
        }
        值1 = 查询顺序表数据(表1,比1);
        值2 = 查询顺序表数据(表2,比2);
        if(值1 <= 值2)
        {
            添1:
            比1++;
            添加顺序表数据(结果, 值1);
        }
        else
        {
            添2:
            比2++;
            添加顺序表数据(结果, 值2);
        }
    }
    return 结果;
}

bool 顺序表空了(const 顺序表_结构 *表)
{
    return 表->表长 <= 0;
}

void 遍历顺序表(const 顺序表_结构* 表)
{
    const char * 左括号 = "[";
    const char * 右括号 = "]";
    char 结果串[1024] = "";
    拼接两个字符串(结果串,左括号);
    for (int i = 0; i< 表->表长;i++)
    {
        char 数据串[8] = "";
        _itoa_s(表->数据[i],数据串,8,10);
        if(i+1 < 表->表长)
        {
            const char * 逗号 = ",";
            拼接两个字符串(数据串, 逗号);
        }
        拼接两个字符串(结果串,数据串);
    }
    拼接两个字符串(结果串,右括号);
    printf_s("%s\n",结果串);
}
